package medium;

import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;

/**
 * 班里有 m 位学生，共计划组织 n 场考试。给你一个下标从 0 开始、大小为 m x n 的整数矩阵 score ，其中每一行对应一位学生，而 score[i][j] 表示第 i 位学生在第 j 场考试取得的分数。矩阵 score 包含的整数 互不相同 。
 * <p>
 * 另给你一个整数 k 。请你按第 k 场考试分数从高到低完成对这些学生（矩阵中的行）的排序。
 * <p>
 * 返回排序后的矩阵。
 * <p>
 * <p>
 * <p>
 * 示例 1：
 * <p>
 * <p>
 * <p>
 * 输入：score = [[10,6,9,1],[7,5,11,2],[4,8,3,15]], k = 2
 * 输出：[[7,5,11,2],[10,6,9,1],[4,8,3,15]]
 * 解释：在上图中，S 表示学生，E 表示考试。
 * - 下标为 1 的学生在第 2 场考试取得的分数为 11 ，这是考试的最高分，所以 TA 需要排在第一。
 * - 下标为 0 的学生在第 2 场考试取得的分数为 9 ，这是考试的第二高分，所以 TA 需要排在第二。
 * - 下标为 2 的学生在第 2 场考试取得的分数为 3 ，这是考试的最低分，所以 TA 需要排在第三。
 * 示例 2：
 */
public class T2545 {
    public static void main(String[] args) {
        sortTheStudents(new int[][]{{10,6,9,1},{7,5,11,2},{4,8,3,15}}, 2);
    }

    /**
     * 利用TreeMap的key有序性
     */
    public static int[][] sortTheStudents(int[][] score, int k) {
        // 单科成绩与成绩列表映射
        TreeMap<Integer, int[]> scoreToScores = new TreeMap<>();
        for (int[] scores : score) {
            scoreToScores.put(scores[k], scores);
        }
        int[][] newScore = new int[score.length][score[0].length];
        int i=0;

        for (Map.Entry<Integer, int[]> entry : scoreToScores.entrySet()) {
            newScore[score.length-1-i] = entry.getValue();
            i++;
        }
        return newScore;
    }
}
